#include "ShareMemory.hpp"
#include "PipeFifo.hpp"
#include "Time.h"
int main()
{
    Client client;
    ShareMemory shm;
    shm.GetKey();
    shm.ObtainShm();
    shm.CreatAtch();
    // 进行通信

    std::cout << "Client wirte: " << std::endl;
    int cnt = 0;
    struct data *message = (struct data *)shm.GetAddr();
    while (true)
    {
        message->type = cnt++;
        strcpy(message->text, GetCurrTime().c_str());
        std::cout << "Client write to Sever ..." << std::endl;
        // sleep(3);
        sleep(1);
        client.WritePipe();
    }
    // char ch = 'A';
    // char* a = (char*)shm.GetAddr();
    // while (ch <= 'Z')
    // {
    //     a[ch-'A'] = ch;
    //     ch++;
    //     std::cout << "Client write to Sever ..." << std::endl;
    //     // sleep(3);
    //     client.WritePipe();

    // }
    // std::cout<< "Client write done...." << std::endl;

    shm.DeleteAtch();

    // 原始代码
    //  key_t k = ::ftok(gpath.c_str(), gprojId);

    // std::cout << "ftok done..." << std::endl;
    // std::cout << "key: " << ToHex(k) << std::endl;
    // if (k < 0)
    // {
    //     std::cout << "ftok error" << std::endl;
    //     return 1;
    // }
    // // 共享内存文件生命周期随系统，返回共享内存描述符
    // // 同时共享内存也是有权限的，我们可以在shmflg中自己设置权限
    // int shmid = ::shmget(k, gsize, IPC_CREAT);

    // std::cout << "shmget done..." << std::endl;
    // if (shmid < 0)
    // {
    //     std::cerr << "shmget error" << std::endl;
    //     return 2;
    // }
    // std::cout << "shmid: " << shmid << std::endl;
    // // 让进程与共享内存关联起来
    // sleep(10);

    // void *ret = shmat(shmid, nullptr, 0);
    // std::cout << "shmat return: " << (long long)ret << std::endl;
    // std::cout << "client shmat done..." << std::endl;
    // sleep(5);

    // // 去关联
    // int n = shmdt(ret);
    // std::cout << "client shmdt done..." << std::endl;
    // if (n < 0)
    // {
    //     std::cout << "shmdt error" << std::endl;
    // }

    return 0;
}
